/*
    This file is part of FSJController.

    FSJController is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    FSJController is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with FSJController.  If not, see <http://www.gnu.org/licenses/>.
*/

package de.qsc.fsjcontroller;

/**
 * Defines an event callback trigger that can be subscribed to an FSController instance
 * 
 * @author Roland Haenel <rha@qsc.de>
 */
public abstract class FSEventCallback {

    final FSEventMatcher matcher;

    /**
     * Creates an event callback for the specified event name and channel UUID
     * 
     * @param eventMatcher the matcher to select which events are handled by this callback
     */
    public FSEventCallback(FSEventMatcher matcher) {
        this.matcher = matcher;
    }

    /**
     * @param event the event to check
     * @returns true if this callback is applicable to the given event
     */
    public boolean isApplicable(FSEvent event) {
        return matcher.matches(event);
    }
    
    /**
     * This method is called when a subscribed event is triggered
     * 
     * @param event the event that triggered this callback
     */
    abstract public void handleEvent(FSEvent event);

}
